/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.capa.manager;

import com.brain.capa.dto.VCapaConsolidadoDto;
import com.brain.core.manager.*;
import com.brain.core.exception.DAOException;
import com.brain.core.hibernate.dao.DAOGenerico;
import com.brain.capa.dto.VCapaConsolidadoPresupuestoDto;
import com.brain.capa.view.util.ConstantesCapa;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

/**
 *
 * @author Hvives
 */
@Service
public class VCapaConsolidadoPresupuestoManager extends ComunManager<VCapaConsolidadoPresupuestoDto> implements Serializable {

    @Resource
    private DAOGenerico<VCapaConsolidadoPresupuestoDto> springHibernateDao;
    private static Logger logger = Logger.getLogger(VCapaConsolidadoPresupuestoManager.class);
    @Resource
    private RecursosManager recursosManager;

    public VCapaConsolidadoPresupuestoDto obtenerPorId(Long id) throws DAOException {
        return springHibernateDao.obtenerDtoPorId(VCapaConsolidadoPresupuestoDto.class, id);
    }

//    public List<VCapaConsolidadoPresupuestoDto> obtenerResumenIversionPorMes(String anio) throws DAOException {
//        String sql = "SELECT  C.ANIO,CAT.ID, CAT.DESCRIPCION CAT_DESCRIPCION,C.AREA,C.AREA_DESCRIPCION, ";
//        sql += "FC_OBTENER_PRESUP_POR_AREA(C.AREA, C.ANIO) PASIGNADO, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('01',C.ANIO,CAT.ID,C.AREA) ENERO, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('02',C.ANIO,CAT.ID,C.AREA) FEBRERO , ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('03',C.ANIO,CAT.ID,C.AREA) MARZO, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('04',C.ANIO,CAT.ID,C.AREA) ABRIL, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('05',C.ANIO,CAT.ID,C.AREA) MAYO, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('06',C.ANIO,CAT.ID,C.AREA) JUNIO, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('07',C.ANIO,CAT.ID,C.AREA) JULIO, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('08',C.ANIO,CAT.ID,C.AREA) AGOSTO, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('09',C.ANIO,CAT.ID,C.AREA) SETIEMBRE, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('10',C.ANIO,CAT.ID,C.AREA) OCTUBRE, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('11',C.ANIO,CAT.ID,C.AREA) NOVIEMBRE, ";
//        sql += "FC_OBTENER_INVERSION_MES_AREA ('12',C.ANIO,CAT.ID,C.AREA) DICIEMBRE, ";
//        sql += "SUM(C.INVERSION) EJECUTADO, ";
//        sql += "(FC_OBTENER_PRESUP_POR_AREA(C.AREA, C.ANIO) - SUM(C.INVERSION)) DISPONIBLE ";
//        sql += "FROM VCAPA_CONSOLIDADO C, TCORE_PARAMETRO CAT ";
//        sql += "WHERE C.CATEGORIA = CAT.ID ";
//        sql += "AND C.ANIO = '" + anio + "' AND C.ID_ESTADO = " + ConstantesCapa.Parametro.PROGRAMACION_EJECUTADO;
//        sql += " GROUP BY C.ANIO, CAT.ID,CAT.DESCRIPCION,C.AREA , C.AREA_DESCRIPCION ";
//        System.out.println(sql);
//        List l = springHibernateDao.ejecutarSQL(sql);
//        List<VCapaConsolidadoPresupuestoDto> retorno = new ArrayList<VCapaConsolidadoPresupuestoDto>();
//
//        for (Object m : l) {
//            Object[] x = (Object[]) m;
//            VCapaConsolidadoPresupuestoDto o = new VCapaConsolidadoPresupuestoDto();
//            o.setCategoria(x[2].toString());
//            o.setAreaDescripcion(x[4].toString());
//            o.setEnero(BigDecimal.valueOf(Long.valueOf(x[6].toString())));
//            o.setFebrero(BigDecimal.valueOf(Long.valueOf(x[7].toString())));
//            o.setMarzo(BigDecimal.valueOf(Long.valueOf(x[8].toString())));
//            o.setAbril(BigDecimal.valueOf(Long.valueOf(x[9].toString())));
//            o.setMayo(BigDecimal.valueOf(Long.valueOf(x[10].toString())));
//            o.setJunio(BigDecimal.valueOf(Long.valueOf(x[11].toString())));
//            o.setJulio(BigDecimal.valueOf(Long.valueOf(x[12].toString())));
//            o.setAgosto(BigDecimal.valueOf(Long.valueOf(x[13].toString())));
//            o.setSetiembre(BigDecimal.valueOf(Long.valueOf(x[14].toString())));
//            o.setOctubre(BigDecimal.valueOf(Long.valueOf(x[15].toString())));
//            o.setNoviembre(BigDecimal.valueOf(Long.valueOf(x[16].toString())));
//            o.setDiciembre(BigDecimal.valueOf(Long.valueOf(x[17].toString())));
//            o.setpEjecutado(BigDecimal.valueOf(Long.valueOf(x[18].toString())));
//            o.setpAsignado(BigDecimal.valueOf(Long.valueOf(x[5].toString())));
//            o.setpDisponible(BigDecimal.valueOf(Long.valueOf(x[19].toString())));
//            retorno.add(o);
//        }
//
//        return retorno;
//    }

    public List<VCapaConsolidadoPresupuestoDto> obtenerResumenIversion(String anio) throws DAOException {
        List<Object> listaParametros = new ArrayList<Object>();
        String hqsql = "select e from VCapaConsolidadoPresupuestoDto as e where e.id=e.id ";
        hqsql += " and e.anio = '" +anio+ "' and e.idEstado = ?";
        listaParametros.add(ConstantesCapa.Parametro.PROGRAMACION_EJECUTADO);
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }

    public List<VCapaConsolidadoPresupuestoDto> obtenerConFiltroConOrden(Map<String, Object> filtros, Map<String, String> orden) throws DAOException {
        return springHibernateDao.obtenerDtosConFiltrosConOrden(VCapaConsolidadoPresupuestoDto.class, filtros, orden);
    }
}
